package com.wushijia.datastructure.list;

import java.util.Arrays;

/**
 * 物理结构：数组
 * @author 92090
 */
public class Array {

  private int[] arr;//
  private int size;//由于数组是在变化的，size也会变化


  public Array(int cap) {
    arr = new int[cap];
    size = 0;//实际数量
  }

  //在i位置处插入元素
  public void insert(int i, int e) {
    //边界问题
    if (i > size || i < 0) {
      throw new ArrayIndexOutOfBoundsException("插入位置大于数组长度或小于0");
    }

    if (arr.length > size) {
      //无需扩容，i位置元素向后移一位
      for (int j = size - 1; j >= i; j--) {
        arr[j++] = arr[j];
      }
      arr[i] = e;
    } else {
      int[] temp = new int[size * 2];
      for (int j = 0; j <= arr.length - 1; j++) {
        if (j < i) {
          temp[j] = arr[j];
        } else {
          temp[j + 1] = arr[j];
        }
      }
      temp[i] = e;
      arr = temp;
    }
    size++;
  }


  @Override
  public String toString() {
    return "Array{" +
            "arr=" + Arrays.toString(arr) +
            ", size=" + size +
            '}';
  }

  public static void main(String[] args) {
    Array array = new Array(2);
    array.insert(0, 2);
    array.insert(1, 2);
    array.insert(2, 3);
    array.insert(3, 3);
    array.insert(4, 5);
    System.out.println(array);
  }
}
